home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / art&graf.ix / art-0039 / source / dcqpiccn.asm < prev    next >
Assembly Source File  |  1997-04-16  |  6KB  |  230 lines

  1. ;    Quick picture conversion routines
  2. ;
  3. ;
  4.     MODULE DCQPicCnv
  5. ;
  6.     SYMBOLS
  7. ;
  8. ;-----------------------------------------------------------------------
  9.         Label QQryLRPIndex  ; ( PixelNo : CARDINAL;
  10. ;                      PGPtr : LowRes16PixelsPtr ) : CARDINAL;
  11. ;
  12. ; Register Usage:    A0 ==> return address
  13. ;            A1 ==> 16PixelsPtr
  14. ;            D0 ==> result
  15. ;            D1 ==> PixelNo ( 0 = bitno 15 )
  16. ;            D2 ==> Scratch
  17. ;            D3 ==> scratch
  18. QQLRPI:
  19.     move.l    (a7)+,a0    ;return addr
  20.     move.l    (a7)+,a1    ;16Pixel  Addr
  21.     move.w    (a7)+,d1    ;pixelno
  22.     xor.w    #$000F,d1    ;bitno
  23.     move.l    #0,d0        ;result
  24.     move.w    #1,d2        ;component
  25.      move.w    (a1)+,d3
  26.      btst.w    d1,d3
  27.     beq.s    .1QQLRPI    ;skip if not set
  28.     add.w    d2,d0    
  29. .1QQLRPI:
  30.     add.w    d2,d2        ;next component
  31.      move.w    (a1)+,d3
  32.      btst.w    d1,d3
  33.     beq.s    .2QQLRPI    ;skip if not set
  34.     add.w    d2,d0    
  35. .2QQLRPI:
  36.     add.w    d2,d2        ;next component
  37.      move.w    (a1)+,d3
  38.      btst.w    d1,d3
  39.         beq.s    .3QQLRPI
  40.     add.w    d2,d0    
  41. .3QQLRPI:
  42.     add.w    d2,d2        ;next component
  43.      move.w    (a1)+,d3
  44.      btst.w    d1,d3
  45.     beq.s    .4QQLRPI    ;skip if not set
  46.     add.w    d2,d0    
  47. .4QQLRPI:
  48.     jmp    (a0)
  49.  
  50. ;----------------------------------------------------------------------
  51.     Label QSetLTHPBP    ;(   StartBitno    : CARDINAL;
  52. ;                                 ScreenLine1,    
  53. ;                            ScreenLine2 : HiRes16PixelsPtr;
  54. ;                     pbp         : PrintBitPatternSet );
  55. ; Register Usage:    A0 ==> return address
  56. ;            A1 ==> Line 1 16PixelsPtr 
  57. ;            A2 ==> Line 2 16PixelsPtr
  58. ;            D0 ==> Bitno
  59. ;            D1 ==> Pattern set 
  60. ;            D2 ==> Scratch
  61. QStLTHP:
  62.     move.l     (a7)+,a0    ;return addr
  63.     move.w    (a7)+,d1    ;print bit battern ( bit 15 = pbp 0 )
  64.     move.l    (a7)+,a2    ;screenline 2
  65.     move.l    (a7)+,a1    ;screenline 1
  66.     move.w    (a7)+,d0    ;start bitno ( bit 15 = pixel 0 )
  67.     xor.w    #$000F,d0    ;make into bitno
  68.     move.w    (a1),d2        ;get current word for line 1
  69.     move.w    (a2),d3        ; current bits for line 2
  70.  
  71.     btst    #15,d1        ;bit 0 in pbp
  72.     beq.s    .1QSetLTHP
  73.     bset    d0,d2        ;set bit in line 1
  74. .1QSetLTHP:
  75.     btst    #13,d1        ;bit 2 in pbp
  76.     beq.s    .2QSetLTHP
  77.     bset    d0,d3        ;set bit in line 2
  78. .2QSetLTHP:
  79.         subq.w    #1,d0
  80.  
  81.     btst    #14,d1        ;bit 1 in pbp
  82.     beq.s    .3QSetLTHP
  83.     bset    d0,d2        ;set bit in line 1
  84. .3QSetLTHP:
  85.     btst    #12,d1        ;bit 3 in pbp
  86.     beq.s    .4QSetLTHP
  87.     bset    d0,d3        ;set bit in line 2
  88. .4QSetLTHP:
  89.     move.w    d2,(a1)        ;get current word for line 1
  90.     move.w    d3,(a2)        ; current bits for line 2
  91.  
  92.     jmp (a0)
  93.  
  94. ;----------------------------------------------------------------------
  95.         Label QQryMRPIndex  ; ( PixelNo : CARDINAL;
  96. ;                        PGPtr : MedRes16PixelsPtr ) : CARDINAL;
  97. ;
  98. ; Register Usage:    A0 ==> return address
  99. ;            A1 ==> 16PixelsPtr
  100. ;            D0 ==> result
  101. ;            D1 ==> PixelNo ( 0 = bitno 15 )
  102. ;            D2 ==> Scratch
  103. ;            D3 ==> Scratch
  104. QQMRPI:
  105.     move.l    (a7)+,a0    ;return addr
  106.     move.l    (a7)+,a1    ;16Pixel  Addr
  107.     move.w    (a7)+,d1    ;pixelno
  108.     xor.w    #$000F,d1    ;bitno
  109.     move.l    #0,d0        ;result
  110.     move.w    #1,d2        ;component
  111.      move.w    (a1)+,d3
  112.      btst.w    d1,d3
  113.     beq.s    .1QQMRPI    ;skip if not set
  114.     add.w    d2,d0    
  115. .1QQMRPI:
  116.     add.w    d2,d2        ;next component
  117.      move.w    (a1)+,d3
  118.      btst.w    d1,d3
  119.     beq.s    .2QQMRPI    ;skip if not set
  120.     add.w    d2,d0    
  121. .2QQMRPI:
  122.  
  123.     jmp    (a0)
  124.  
  125. ;----------------------------------------------------------------------
  126.     Label QSetMTHPBP    ;(   StartBitno    : CARDINAL;
  127. ;                                 ScreenLine1,    
  128. ;                            ScreenLine2 : HiRes16PixelsPtr;
  129. ;                     pbp         : PrintBitPatternSet );
  130. ; Register Usage:    A0 ==> return address
  131. ;            A1 ==> Line 1 16PixelsPtr 
  132. ;            A2 ==> Line 2 16PixelsPtr
  133. ;            D0 ==> Bitno
  134. ;            D1 ==> Pattern set 
  135. ;            D2 ==> Scratch
  136. QStMTHP:
  137.     move.l     (a7)+,a0    ;return addr
  138.     move.w    (a7)+,d1    ;print bit battern ( bit 15 = pbp 0 )
  139.     move.l    (a7)+,a2    ;screenline 2
  140.     move.l    (a7)+,a1    ;screenline 1
  141.     move.w    (a7)+,d0    ;start bitno ( bit 15 = pixel 0 )
  142.     xor.w    #$000F,d0    ;make into bitno
  143.     move.w    (a1),d2        ;get current word for line 1
  144.     move.w    (a2),d3        ; current bits for line 2
  145.  
  146.     btst    #15,d1        ;bit 0 in pbp
  147.     beq.s    .1QSetMTHP
  148.     bset    d0,d2        ;set bit in line 1
  149. .1QSetMTHP:
  150.     btst    #14,d1        ;bit 2 in pbp
  151.     beq.s    .2QSetMTHP
  152.     bset    d0,d3        ;set bit in line 2
  153. .2QSetMTHP:
  154.     move.w    d2,(a1)        ; current word for line 1
  155.     move.w    d3,(a2)        ; current bits for line 2
  156.  
  157.     jmp (a0)
  158.  
  159.  
  160. ;----------------------------------------------------------------------
  161.  
  162.     Label QQryHRPixel ;(     x, y       : CARDINAL;
  163. ;                           VAR picture : HiResScreen ) : BOOLEAN; 
  164. ;
  165. ; Constants;
  166. HiResLineSize        EQU     80    ;bytes long
  167.  
  168. ; Register Usage:    A0 ==> return address
  169. ;            A1 ==> picture addr
  170. ;            D0 ==> result
  171. ;            D1 ==> x 
  172. ;            D2 ==> y
  173. ;            D3 ==> Scratch
  174. QQryHRP:
  175.     move.l    (a7)+,a0    ;return addr
  176.     move.l    (a7)+,a1    ;picture address
  177.     move.w    (a7)+,d2    ;y
  178.     moveq.l    #0,d1        ;clear hi word
  179.     move.w    (a7)+,d1    ;x
  180.     moveq.l    #0,d0        ;assume false
  181.     mulu    #HiResLineSize,d2
  182.     divu    #16,d1        ;d1 = number of words
  183.         add.w    d1,d1        ;byte disp into picture
  184.     add.w   d1,d2        ;disp into picture
  185.     swap    d1        ;bitno to test
  186.     xor.w    #$000f,d1    ;pixel no
  187.     move.w    0(a1,d2.l),d3    ;get 16pixels
  188.     btst.w    d1,d3        ;check pixel
  189.     beq.s    .0QQryHRPEnd
  190.     subq.l    #1,d0        ;leave true
  191. .0QQryHRPEnd:
  192.     jmp (a0)
  193.  
  194. ;----------------------------------------------------------------------
  195.  
  196.     Label QQColourComp ;( Colour       : CARDINAL;
  197. ;                           VAR Red, Green, Blue : CARDINAL ); 
  198. ;
  199. ; Constants    : colour = ???? XRRR XGGG XBBB
  200. CMask        EQU    0007;
  201. CShift        EQU    0004;
  202.  
  203. ; Register Usage:    A0 ==> return address
  204. ;            A1 ==> blue
  205. ;            A2 ==> Green
  206. ;            A4 ==> Red
  207. ;            D0 ==> scratch
  208. ;            D1 ==> colour
  209. QQColComp:
  210.     move.l    (a7)+,a0    ;return addr
  211.     move.l    (a7)+,a1    ;blue
  212.     move.l    (a7)+,a2    ;green
  213.     move.l    (a7)+,a4    ;red
  214.     move.w    (a7)+,d1    ;colour
  215.     move.w    d1,d0
  216.     and.w    #CMask,d0
  217.     move.w    (a1),d0        ;return blue
  218.  
  219.     lsr.w    #CShift,d1    ;green to lsb
  220.     move.w    d1,d0
  221.     and.w    #CMask,d0
  222.     move.w    (a2),d0        ;return green
  223.  
  224.     lsr.w    #CShift,d1    ;green to lsb
  225.     move.w    d1,d0
  226.     and.w    #CMask,d0
  227.     move.w    (a4),d0        ;return red
  228.     
  229.     jmp     (a0)
  230.     end